iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Software Development

用30天學習C++系列 第 28

Day28 實作-貪食蛇小遊戲(上)

  • 分享至 

  • xImage
  •  

終於來到我們的實作部分了!


我們今天要寫的遊戲是貪食蛇,以下是需要的標頭黨

#include <iostream>     //include的函式庫,要輸入輸出會使用到iostream
#include <windows.h>    //用到windows的api 
#include <conio.h>      //偵測使用者輸入什麼 
#include <cstdlib>      //亂數 
#include <ctime>        //時間初始化

接下來是宣告變數

// 遊戲變數宣告 
bool gameOver;    //判斷遊戲是否結束 
const int width = 25;   //遊戲畫面寬度 
const int height = 15;  //遊戲畫面長度
int x,y,coinX,coinY,score;   //xy為蛇的初始位置,coinxy為錢幣
int nTail;   //number of tail的意思,紀錄蛇的長度
int tailX[150],tailY[150];   //尾巴的座標 
int direction;   //宣告整數資料型態的方向
const int Stop = 0, Left=1, Right=2, Up=3, Down=4;  //宣告四個狀態 

初始化遊戲

void SetUp(){     //初始化遊戲 
	gameOver = 0;   //設成0代表還未gameover 
	direction =Stop;  //初始化的方向是暫停的 
	x=width/2;
	y=height/2;     //初始化面大約為螢幕中心點 
	flag:
	coinX=rand()%(width - 1)+1;     
	coinY=rand()%(height - 1)+1;   //用亂數產生錢幣位置
	if(x == coinX && y ==coinY){    //如果蛇的位置和錢幣重疊 
		goto flag;
	} 
	return;
}

產生遊戲畫面

void Draw(){    //產生遊戲畫面 
	Sleep(100);  //讓畫面暫停0.1秒
	Clear();   //繪製畫面前把上一個畫面清除 
	
	for(int i=0; i<width+2; i++){    //繪製上半部邊框 
		cout << "#";    //代表上面的邊框 
	}
	cout << endl;   //換行 
	
	for(int i=0; i<height; i++){
		for(int j=0; j<width; j++){
			if(j == 0){    //左邊的邊框 
				cout <<"#";
			}
			if (i == y && j == x){
				cout << "*";  //代表蛇 
			}
		    else if(i == coinY && j ==coinX){
		    	cout <<"$";    //代表錢錢 
			} 
			else{
				bool printSnake = false;
				for(int k=0; k<nTail; k++){
					if(tailX[k] == j && tailY[k] == i){  //代表這個位置是蛇的身體 
						cout << "*";
						printSnake = true;
					}
				}
				if(!printSnake){
					cout << " ";  //印出空格 
				}
			}
			if(j == width-1){  //右邊邊框 
				cout << "#";
			}
		}
		cout << endl;
	}
	for(int i=0; i<width+2; i++){    //繪製下半部邊框 
		cout << "#";    //代表上面的邊框 
	}
	cout << endl;
	cout << "Score: " << score << endl;   //印出分數 
	return;
}

主程式在這邊

#include "snake.h"

int main(){
	SetUp();
	while(!gameOver){
		Draw(); 
	}
	return 0;
}

執行完的結果就是這樣啦~下一篇文章我們再把遊戲完成!
https://ithelp.ithome.com.tw/upload/images/20241012/20169410WN8v7CtdPt.jpg


我沒有做太多的文字敘述,我盡量都打在註解裡了,希望大家看得懂!


上一篇
Day27 類別的繼承
下一篇
Day29 實作-貪食蛇小遊戲(下)
系列文
用30天學習C++30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言